<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			/**
			 * 构造函数的执行流程
			 * 1. 立刻创建一个新的对象
			 * 2. 将新建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象
			 * 3. 逐行执行函数中的代码
			 * 4. 将新建对象作为返回值返回
			 * */
			function Person(name, age, balance){
				this.name = name;
				this.age = age;
				this.balance = balance;
				this.sayName = function (){
					console.log(this.name);
				}
			}
			/**
			 * 目前我们的方法是在构造函数内部创建的，
			 * 每执行一次构造函数，都要创建一个新的方法
			 * 浪费空间，完全可以让所有的对象共享一个方法
			 * */
			var per1 = new Person("双双",56656,5867864455);
			// console.log(per1);
			var per2 = new Person("双双2",56,564455);
			// console.log(per2);
			
			function Cat(name, color){
				this.name = name;
				this.color = color;
				this.sayHello = sayHello(name);
			}
			
			/**
			 * 可以避免创建一个对象就床架一个函数
			 * 但是定义在全局作用域中，污染了全局作用域的命名空间
			 * 也很不安全
			 * */
			function sayHello(name){
				console.log(name + " hello~~");
			}
			var cat1 = new Cat("kitty", "white");
			console.log(cat1);
			var cat2 = new Cat("lucy", "black");
			console.log(cat2);
		</script>
	</body>
</html>
